package com.loong.android.tools;

import java.security.MessageDigest;

/**
 * MD5加密
 */
public class Md5 {

    /**
     * 取MD5文本
     *
     * @param data 文本数据
     * @param charsetName 编码，如"UTF-8"、"GBK"等，默认为: UTF-8
     * @return 返回32字符长度的文本
     */
    public static String getString(String data, String charsetName) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(data.getBytes(charsetName));
        } catch (Exception e) {
            return null;
        }
        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10)
                hex.append("0");
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString();
    }

    /**
     * 取MD5文本
     *
     * @param data 文本数据
     * @return 返回32字符长度的文本
     */
    public static String getString(String data) {
        return getString(data, "UTF-8");
    }

    /**
     * 取MD5文本
     *
     * @param data 字节数据
     * @return 返回32字符长度的文本
     */
    public static String getString(byte[] data) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(data);
        } catch (Exception e) {
            return null;
        }
        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10) hex.append("0");
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString();
    }

    /**
     * 取MD5字节数组
     *
     * @param data 待加密的数据
     * @param charsetName 编码，如"UTF-8"、"GBK"等，默认为: UTF-8
     * @return 返回32字符长度的文本
     */
    public static byte[] toBytes(String data, String charsetName) {
        try {
            return MessageDigest.getInstance("MD5").digest(data.getBytes(charsetName));
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 取MD5字节数组
     *
     * @param data 待加密的数据
     * @return 返回32字符长度的文本
     */
    public static byte[] toBytes(String data) {
        return toBytes(data, "UTF-8");
    }

    /**
     * 取MD5字节数组
     *
     * @param data 待加密的数据
     * @return 返回32字符长度的文本
     */
    public static byte[] toBytes(byte[] data) {
        try {
            return MessageDigest.getInstance("MD5").digest(data);
        } catch (Exception e) {
            return null;
        }
    }
}
